package tech.aistar.day05.constructor;

/**
 * 本类用来演示: 测试构造方法...
 *
 * @author: success
 * @date: 2021/3/12 1:37 下午
 */
public class TestContructorDemo {
    public static void main(String[] args) {
        //1. 构建一个Product对象
        //构造方法是如何调用的 - 通过new关键字.
        Product p1 = new Product();
        //通过setter方法进行赋值
        p1.setId(2);
        p1.setName("mac");
        p1.setPrice(100.0d);

//        setter方法可以进行多次赋值,但是构造方法只能赋值一次.

        p1.setName("linux");
        System.out.println(p1);

        //2. 利用带参构造来构建这个对象
        //在构建p2对象的同时来对属性进行赋值操作,机会只有一次

        //只要看到new关键字 - 开辟区域,分配空间,初始化 - 新建了新的对象
        Product p2 = new Product(1,"tom",100.0d);

        //通过setter方法来更新属性值
        //p2.setName("windows");

        //此时p2会重新指向第二次创建出来的产品对象.
        //然后我们之前的产品对象就会成为一个垃圾对象
        //垃圾对象 - 没有任何引用指向的对象
        p2 = new Product(1,"windows",100.0d);

        System.out.println(p2);

        //调用全参构造
        //关于它里面自定义的对象类型的赋值方式
        //构建一个产品类型对象
        ProductType t1 = new ProductType(1,"新品");

        Product p3 = new Product(3,"mac",100.0d,new String[]{"a","b","c"},t1);
        System.out.println(p3);

        //方式二 - 构造和setter一起使用
        Product p4 = new Product(4,"mac",100.0d,new String[]{"a","b","c"},null);
        p4.setProductType(t1);
        System.out.println(p4);
    }
}
